package br.com.werp.regras.almoxarifado.integracao;

import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.tabelas.Grupo;
import br.com.werp.regras.geral.vos.tabelas.Produto;

import java.sql.Connection;

import java.util.List;


/**
 * @author aledson
 * Criado em 02/01/2006
 */
public class GrupoDAO extends MasterDAO {
    private static GrupoDAO grupoDAO;

    /**
     * @param banco
     * @throws Exception
     */
    private GrupoDAO(String banco) throws Exception {
        super(banco);
    }

    public static GrupoDAO getGrupoDAO() throws Exception {
        if (grupoDAO == null) {
            grupoDAO = new GrupoDAO(Constantes.BANCO);
        }

        return grupoDAO;
    }

    /**
     * @param grupo
     * @return
     * @throws Exception
     */
    public List obterGrupos(Grupo grupo) throws Exception {
        Connection connection = getConexao();

        try {
            return pesquisarVO(connection, grupo);
        } finally {
            liberaConeccao(connection);
        }
    }

    public void salvarGrupo(Grupo grupo, Object key) throws Exception {
        Connection connection = validarTransacao(key);
        inserirVO(connection, grupo, new String[] { "grpo_id" });
    }

    public void atualizarGrupo(Grupo grupo, Object key)
        throws Exception {
        Connection connection = validarTransacao(key);
        atualizarVO(connection, grupo, new String[] { "grpo_id" });
    }

    public List pesquisarGrupo(Grupo grupo, Object key)
        throws Exception {
        Connection connection = null;

        try {
            if (key == null) {
                connection = getConexao();
            } else {
                connection = validarTransacao(key);
            }

            String where = "";

            if (!Util.isNullOrEmpty(grupo.getGrpo_descricao())) {
                where += (" and grpo_descricao like " +
                aspasLike(grupo.getGrpo_descricao()));
                grupo.setGrpo_descricao(null);
            }

            return pesquisarVO(connection, grupo, where);
        } finally {
            liberaConeccao(connection);
        }
    }

    public List pesquisarGrupos(Grupo grupo) throws Exception {
        return pesquisarGrupo(grupo, null);
    }
}
